
使用DFS算法得到该无向图的N个连通分量，代码如下：
1.
int id[total];        //记录每一个节点所属的连通分量id
//预处理算法
GetNConnected() {
  int total = GetVertexNum();
  int count = 0;        //记录无向图的连通分量个数
  bool visited[total];  //记录该节点是否被访问过
  int num = 0;          //记录访问过的节点数量


  stack<int> ss;
  for (int i = 0; i < total; ++i) {
    visited[i] = false;
  }

  while (num < total) {
    int current;      //记录第一个没被访问的节点
    for (int i = 0; i < total; ++i) {
      if (!visited[i]) {
        current = i;
        break;
      }
    }
    ss.push_back(current);     //将节点入栈
    num++;
    visited[current] = true;
    while (!ss.empty()) {
      int m = -1;
      int nn = ss.top();
      id[nn] = count;
      ss.pop_back();
      while ((m = GetNextNeighbor(nn, m)) != -1) {
          if (!visited[m]) {
            visited[m] = true;
            ss.push_back(m);
            num++;
        }
      }
    }
    count++;
  }
}

2.
//判断是否可达算法
bool connected(int u, int v) {
  return id[u] == id[v];
}
返回true证明可达
